package com.slwish.xty.mvp.presenter;

import android.content.Context;
import android.text.TextUtils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.slwish.common.mvp.presenter.BasePresenter;
import com.slwish.common.utils.StringUtils;
import com.slwish.xty.R;
import com.slwish.xty.config.UrlConfig;
import com.slwish.xty.mvp.contract.RegisterContract;
import com.slwish.xty.utils.PwdCheckUtil;
import com.zhouyou.http.EasyHttp;
import com.zhouyou.http.callback.ProgressDialogCallBack;
import com.zhouyou.http.callback.SimpleCallBack;
import com.zhouyou.http.exception.ApiException;

/**
 * 首页
 *
 * @author 陈浩
 * @version 1.0.0
 */
public class RegisterPresenter extends BasePresenter<RegisterContract.View> implements RegisterContract.Presenter {

    public RegisterPresenter(RegisterContract.View view) {
        // 初始化数据仓库
        super(view);
    }

    /**
     * 获取验证码
     * @param mobile 手机号码
     * @param cause 来自哪里的获取验证码
     */
    @Override
    public void getVerifyCode(String mobile, String cause) {
        //处理账号及密码
        if (!StringUtils.isMobileExact(mobile)) {
            setError(R.string.input_right_phone_number_hint);
            return;
        }
        EasyHttp.post(UrlConfig.SEND_VERIFICATION_CODE_URL)
                .params("mobile", mobile)
                .params("cause", cause)
                .execute(new SimpleCallBack<String>() {
                    @Override
                    public void onSuccess(String json) {
                        try {
//                            0 成功
//                            1 失败
//                            2 一个手机号码最多发送5条短信验证码
//                            3 当前手机未注册

                            JSONObject jsonObject = JSON.parseObject(json);
                            String resultCode = (String) jsonObject.get("resultCode");
                            String resultMessage = (String) jsonObject.get("resultMessage");
                            //登记失败时（账号密码不正确）return
//                            if (!TextUtils.equals(resultCode, "0")) {
                                setError(resultMessage);
//                                return;
//                            }

                        } catch (Exception e) {
                            //
                            setError(R.string.getverifycode_failed_text);
                        }
                    }

                    @Override
                    public void onError(ApiException e) {
                        setError(R.string.getverifycode_failed_text);
                    }
                });
    }

    /**
     * 注册
     * @param context 上下文
     * @param mobile 手机号
     * @param code 验证码
     * @param password 密码
     */
    @Override
    public void register(Context context, String mobile,String code, String password) {
        //处理账号及密码
        if (!StringUtils.isMobileExact(mobile)) {
            setError(R.string.input_right_phone_number_hint);
            return;
        }
        final int length = StringUtils.length(password);
        if (length < 6 || length > 20) {
            setError(R.string.input_password_length_hint);
            return;
        }
        if (!PwdCheckUtil.isLetterDigit(password)) {
            setError(R.string.the_password_is_too_simple_hint);
            return;
        }
        EasyHttp.post(UrlConfig.REGISTER_URL)
                .params("mobile", mobile)
                .params("code", code)
                .params("password", password)
                .execute(new ProgressDialogCallBack<String>(showProgressDialog(context)) {

                    @Override
                    public void onSuccess(String json) {
                        try {
                            JSONObject jsonObject = JSON.parseObject(json);
                            String resultCode = (String) jsonObject.get("resultCode");
                            String resultMessage = (String) jsonObject.get("resultMessage");
                            //登记失败时（账号密码不正确）return
                            setError(resultMessage);
                            if (!TextUtils.equals(resultCode, "0")) return;

                        } catch (Exception e) {
                                setError(R.string.register_failed_text);
                        }
                    }

                    @Override
                    public void onError(ApiException e) {
                        super.onError(e);
                            setError(R.string.register_failed_text);
                    }
                });
    }

}
